//  路由鉴权(某一个路由什么条件下可以访问、什么条件下不能访问)
import router from "./router";
import nprogress from 'nprogress'
// 引入进度条css
import 'nprogress/nprogress.css';
nprogress.configure({showSpinner: false}) // 去除加载小圆圈
//获取用户相关的小仓库内部token数据，去判断用户是否登陆成功
import { useUserStore } from "./store/modules/user";
import pinia from "./store";
import setting from "./setting";

const userStore = useUserStore(pinia)
// console.log(userStore);
// 全局守卫：项目当中任意路由切换都会触发的钩子
// 前置守卫
// to: 要去往哪个路由，from: 来自哪个路由 next: 路由的放行函数
router.beforeEach(async(to, from, next)=> {
    // console.log(to);
    document.title = `${setting.title}-${to.meta.title}`
    nprogress.start()
    if (userStore.token) {
        // 登陆成功，有token时，其余六个路由可以访问，login不可访问
        if (to.path !== '/login') {
            // 有用户信息
            if (userStore.username) {
                next()
            } else {
                // 没有用户信息，在守卫这里，再次发请求获取用户信息
                try {
                   await userStore.userInfo()
                //    万一刷新的是异步路由，有可能获取到用户信息，异步路由还没有加载完毕，出现空白的效果
                    next({...to})
                }catch(err) {
                    console.log(err);
                    // token过期：获取不到用户信息
                   await userStore.userLogout()
                    next({path: '/login', query: {redirect: to.path}})
                }
                
                
            }
            
        } else {
            next({path: '/'})
        }
    } else {
        // 没有登录，访问login 可以访问；其余六个路由不可访问
        if (to.path === '/login') {
            next()
        } else {
            next({path: '/login', query: {redirect: to.path}})
        }
        next()
    }
     
})

// 后置守卫
router.afterEach((to, from) => {
    nprogress.done()
})


//第一个问题：任意路由切换实现进度条业务 ----nprogress
//第二个问题：路由鉴权
//全部路由组件 ：登录|404|任意路由|首页|数据大屏|权限管理（三个子路由）|商品管理（4个子路由）

//用户未登录 ：可以访问login 其余都不行（让其指向login）
//登陆成功：不可以访问login 其余都可以（让其指向首页）